package cn.highset.common.utils;

import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;

/**
 * @Author: Victor
 * @Description:
 * @Date:Create in 11:09 2019/4/26
 * @Modified By:
 */
public class AuthKit {
    /**
     * 验证当前用户是否属于以下任意一个角色。
     *
     * @param roles 角色列表
     * @return 属于:true,否则false
     */
    public static boolean hasAnyRoles(String... roles) {
        if (roles != null && roles.length > 0) {
            for (GrantedAuthority ga : ((UserDetails) SecurityContextHolder.getContext()
                    .getAuthentication().getPrincipal()).getAuthorities()) {
                for (String role : roles) {
                    if (ga.getAuthority().equals(role)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    /**
     * 验证当前用户是否属于该角色？,使用时与lacksRole 搭配使用
     *
     * @param role 角色名 英文
     * @return 属于该角色：true，否则false
     */
    public static boolean hasRole(String role) {
        if (role != null && role.length() > 0) {
            for (GrantedAuthority ga : ((UserDetails) SecurityContextHolder.getContext()
                    .getAuthentication().getPrincipal()).getAuthorities()) {
                if (ga.getAuthority().equals(role)) {
                    return true;
                }
            }
        }
        return false;
    }

    /**
     * 与hasRole标签逻辑相反，当用户不属于该角色时验证通过。
     *
     * @param role 角色名
     * @return 不属于该角色：true，否则false
     */
    public static boolean lacksRole(String role) {
        return !hasRole(role);
    }
}
